Read in SF trees data

sf_trees <- read_csv(here("data", "sf_trees", "sf_trees.csv"))
## Parsed with column specification:
## cols(
##   tree_id = col_double(),
##   legal_status = col_character(),
##   species = col_character(),
##   address = col_character(),
##   site_order = col_double(),
##   site_info = col_character(),
##   caretaker = col_character(),
##   date = col_date(format = ""),
##   dbh = col_double(),
##   plot_size = col_character(),
##   latitude = col_double(),
##   longitude = col_double()
## )

Basic wrangling reminders

Refresh some skills for data wrangling and summary statistics using functions in the dplyrpackage.

Find the top 5 highest observations of trees by legal status, do some wrangling, and make a graph.

top_5_status <- sf_trees %>%
  count(legal_status) %>%
  drop_na(legal_status) %>%
  rename(tree_count = n) %>%
  relocate(tree_count) %>%
  slice_max(tree_count, n = 5)

Make a graph of those top 5 observation by legal status.

ggplot(data = top_5_status, aes(x = fct_reorder(legal_status, tree_count), y = tree_count)) +
  geom_col() +
  labs(x = "Legal Status", y = "Tree Count") +
  coord_flip() +
  theme_minimal()

A few more data wrangling refresher examples.

Only want to keep observations (rows) for Blackwood Acacia trees.

blackwood_acacia <- sf_trees %>%
  filter(str_detect(species, "Blackwood Acacia")) %>%
  select(legal_status, date, latitude, longitude)
  
ggplot(data = blackwood_acacia, aes(x = longitude, y = latitude)) +
  geom_point()
## Warning: Removed 27 rows containing missing values (geom_point).

tidyr::separate() and unite() functions

Useful for combining or separating columns. scientific name :: common name Can ask R to split this columns up using this separator.

sf_trees_sep <- sf_trees %>%
  separate(species, into = c("spp_scientific", "spp_common"), sep = "::")

Example" tidyr::unite()

Lets say we wante dto combine tree and legal status

sf_trees_unite <- sf_trees %>%
  unite("id_status", tree_id:legal_status, sep = "_cool!_")

Make some actual maps of blackwood acacia trees in SF.

st_as_sf() to convert latitude and longitude to spatial coordinates.

blackwood_acacia_sp <- blackwood_acacia %>%
  drop_na(longitude, latitude) %>%
  st_as_sf(coords = c("longitude", "latitude"))

st_crs(blackwood_acacia_sp) = 4326


ggplot(data =blackwood_acacia_sp) +
  geom_sf(color = "darkgreen")

Read in San Francisco roads shapefile.

sf_map <- read_sf(here("data", "sf_map", "tl_2017_06075_roads.shp"))

st_transform(sf_map, 4326)
## Simple feature collection with 4087 features and 4 fields
## geometry type:  LINESTRING
## dimension:      XY
## bbox:           xmin: -122.5136 ymin: 37.70813 xmax: -122.3496 ymax: 37.83213
## CRS:            EPSG:4326
## # A tibble: 4,087 x 5
##    LINEARID   FULLNAME    RTTYP MTFCC                              geometry
##  * <chr>      <chr>       <chr> <chr>                      <LINESTRING [°]>
##  1 110498938… Hwy 101 S … M     S1400 (-122.4041 37.74842, -122.404 37.748…
##  2 110498937… Hwy 101 N … M     S1400 (-122.4744 37.80691, -122.4746 37.80…
##  3 110366022… Ludlow Aly… M     S1780 (-122.4596 37.73853, -122.4596 37.73…
##  4 110608181… Mission Ba… M     S1400 (-122.3946 37.77082, -122.3929 37.77…
##  5 110366689… 25th Ave N  M     S1400 (-122.4858 37.78953, -122.4855 37.78…
##  6 110368970… Willard N   M     S1400 (-122.457 37.77817, -122.457 37.7781…
##  7 110368970… 25th Ave N  M     S1400 (-122.4858 37.78953, -122.4858 37.78…
##  8 110498933… Avenue N    M     S1400 (-122.3643 37.81947, -122.3638 37.82…
##  9 110368970… 25th Ave N  M     S1400 (-122.4854 37.78982, -122.4858 37.78…
## 10 110367749… Mission Ba… M     S1400 (-122.3865 37.77086, -122.3878 37.77…
## # … with 4,077 more rows
ggplot(data = sf_map) +
  geom_sf()

Want roads as a background map for acacia trees so need them in the same cooridnate reference system the same CRS. Find out what CRS the data is in by going in the console and typing st_transorm(sf_map) and see that the CRS is in 4269.

Combine blackwood acacia tree observations and the san francisco roads map.

ggplot() +
  geom_sf(data = sf_map, size = 0.1, color = "darkgray") +
  geom_sf(data = blackwood_acacia_sp, size = 0.5, color = "red") +
  theme_void()

Now to create an interactive map.

tmap_mode("view")
## tmap mode set to interactive viewing
tm_shape(blackwood_acacia_sp) +
  tm_dots()